import redis
import json
import pymongo

client = redis.Redis()
handler = pymongo.MongoClient().chatper_8.people_info

people_info_list = []
while True:
    '''
    虽然还是批量插入数据,但为了安全起见,是小批量插入。
    每从Redis中读取1000条数据就插入一次数据库。这样做的好处是,
    即使电脑断电,最多丢失1000条数据。当然,这里需要根据系统能够容忍的最大丢失数据条数来设置。
    '''
    people_info_json = client.lpop('people_info')
    if people_info_json:
        people_info = json.loads(people_info_json.decode())
        people_info_list.append(people_info)
        if len(people_info_list) >= 1000:  # 如列表中的数据超过1000条就先插入数据库
            handler.insert_many(people_info_list)
            people_info_list = []
    else:
        break

if people_info_list:  # 最后一轮可能凑不够1000条数据,所以还需要看看是否需插入
    '''
    再一次判断people_info_list是否为空。如果不为空,则再插入一次。这是因为:总数据量如果不是1000的整数倍,
    那么最后一轮凑不够1000条数据,在循环中无法插入,所以结束循环以后还需要再插入一次。
    但是insert_many是不能接收空列表的,所以只有在people_info不为空时才能插入。
    '''
    handler.insert_many(people_info_list)
